package modelo.persistencia;

import modelo.dominio.Veiculo;
import java.util.ArrayList;
import java.util.Collections;
import javax.persistence.EntityManager;
import javax.persistence.Query;

/**Classe responsável pelos metodos de veiculo
*/
public class PersistenciaVeiculo extends DAOBase {
	
	public ArrayList<Veiculo> listaVeiculos = new ArrayList<Veiculo>();
	
	/**Metodo que lista todos os veículos cadastrados
	*/
	public ArrayList<Veiculo> getListaVeiculos(){
		EntityManager em = getEntityManager();
		Query query = em.createQuery("from Veiculo");
		listaVeiculos = (ArrayList<Veiculo>)query.getResultList();
		return listaVeiculos;
	}
	/**Método que lista todos os veículos por categoria
	*/		
	public ArrayList<Veiculo> getListaPorCategoria(Veiculo veiculo) {
		ArrayList<Veiculo> listaCategoria = new ArrayList<Veiculo>();
		EntityManager em = getEntityManager();
		int id = veiculo.getTipoVeiculo().getIdTipoVeiculo();
		Query query = em.createQuery("from Veiculo as v where v.tipoVeiculo.idTipoVeiculo = " + id);
		listaCategoria = (ArrayList<Veiculo>)query.getResultList();
		return listaCategoria;
	}
	
	/**Método que lista todos os veículos disponíveis
	*/	
     public ArrayList<Veiculo> getListaVeiculosDisponiveis() {
		ArrayList<Veiculo> listaDisponiveis = new ArrayList<Veiculo>();
		EntityManager em = getEntityManager();
		Query query = em.createQuery("from Veiculo as v where v.disponivel = true");
		listaDisponiveis = (ArrayList<Veiculo>)query.getResultList();
		return listaDisponiveis;
	}
	
	/**Método que lista os veículos mais procurados
	*/	
	public ArrayList<Veiculo> getVeiculosMaisProcurados() {
		ArrayList<Veiculo> listaMaisProcurados = getListaVeiculos();
		Collections.sort(listaMaisProcurados, new ComparadorQuantLocacao());
		Collections.reverse(listaMaisProcurados);
		return listaMaisProcurados;
	}
	
	/**Método que lista os veículos mais rentáveis
	*/	
	public ArrayList<Veiculo> getVeiculosMaisRentaveis() {
		ArrayList<Veiculo> listaMaisRentaveis = getListaVeiculos();
		Collections.sort(listaMaisRentaveis, new ComparadorValorLocacao());
		Collections.reverse(listaMaisRentaveis);
		return listaMaisRentaveis;
	}
		
}
